home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 7500 < prev    next >
Encoding:
Text File  |  1996-08-05  |  2.5 KB  |  86 lines

  1. Path: garden.csc.calpoly.edu!not-for-mail
  2. From: dstubbs@garden.csc.calpoly.edu (Dan Stubbs)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Simple Program Question
  5. Date: 26 Feb 1996 16:10:24 -0800
  6. Organization: Cal Poly, San Luis Obispo
  7. Message-ID: <4gti5g$d78@garden.csc.calpoly.edu>
  8. References: <4gsr9u$sk6@newsbf02.news.aol.com>
  9. NNTP-Posting-User: dstubbs@garden.csc.calpoly.edu
  10.  
  11. In article <4gsr9u$sk6@newsbf02.news.aol.com>, Tycope <tycope@aol.com> wrote:
  12. >I am trying to write a non -interactive program that calculates all
  13. >integer triples (i, j, k) such that 
  14. >0 < i < j < k < l and i + j + k = l. Print out the number of triples that
  15. >satisfy the requirements and print out every millionth triple.  Can anyone
  16. >see where I am missing the boat in the following code.  The program runs
  17. >and immediately terminates.  Thanks in advance for any feedback. 
  18. >
  19. >#include <stdio.h>
  20. >
  21. >long int i, j, k, l;
  22. >long int count;
  23. >
  24. >int
  25. >main (void)
  26. >{
  27. >    do
  28. >    {
  29. >        (l = i + j + k);
  30. >        (i = 1);
  31. >        (j = 2);
  32. >        (k = 3);
  33. >        (i++, j++, k++);
  34. >        (++count);
  35. >    if (count % 1000000 == 0)
  36. >     {
  37. >        printf("%ld(i) + %ld(j) + %ld(k) = %ld(l)", i, j, k, l);
  38. >     }
  39. >
  40. >    } while (0 < i < j < k < l);
  41. >
  42. >    return (0);
  43. >}
  44.  
  45. It appears to me that you are to fix el (use el instead of l) and then find 
  46. i, j, and k such that 0<i<j<k and i+j+k = el. Your code doesn't do anything
  47. like that. A couple of problems: the first time l = i+j+k is encountered
  48. i, j, and k have had no value assigned and hence what happens is undefined.
  49. Perhaps that is where your program dies.
  50.  
  51. Then, each time through your do-while loop i,j and k are *all* incremented by
  52. exactly 1. Hence the value of i,j and k in ;your program are 1,2,3; 2,3,4;
  53. 3,4,5; 4,5,6; ...  j,j+1,j+2, ... . Surely you want something more general
  54. than that.
  55.  
  56. I don't believe your code could compile. Your while condition:
  57.  
  58.    while (0<i<j<k<l) is not legal. I suspect you want something like:
  59.  
  60.    while (0<i && i<j && j<k && k<l). 
  61.  
  62. Your logic is pretty far off, so here is a solution to the problem as I
  63. understand it. (The fixed value of el is read from the command line.)
  64.  
  65. /*----------------------------------------------*/
  66. #include <stdio.h>
  67.  
  68. int main (int argc, char *argv[]) {
  69.  
  70.    int el = atoi(argv[1]);
  71.    int i,j,k;
  72.    int count = 0;
  73.  
  74.    for (i=1; i <= (el-3)/3; i++) {
  75.       for (j = i+1; j <= (el - (i+1))/2; j++) {
  76.          k = el - (i+j);
  77.          count++;
  78.          if (count % 1000000 == 0)
  79.             printf ("%d+%d+%d = %d\n", i,j,k,el);
  80.       }
  81.    }
  82.    printf ("      count = %d\n", count);
  83. }
  84. /*----------------------------------------------*/
  85.  
  86.